package com.lh.util;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.Arrays;
import java.util.List;

public class CodeGenerator {
    public static void main(String[] args) {

        //配置代码生成器
        AutoGenerator autoGenerator = new AutoGenerator();

        //配置全局配置
        GlobalConfig globalConfig = new GlobalConfig();
        //获取用户当前工作路径
        String outPath = System.getProperty("user.dir");
        //设置输出目录    就是左边src/main/java下自己定义的目录下
        globalConfig.setOutputDir(outPath + "/src/main/java");
        //设置作者
        globalConfig.setAuthor("lh");
        //设置代码自动生成后时候自动打开代码生成好的文件夹
        globalConfig.setOpen(false);
        //设置文件是否覆盖   不覆盖
        globalConfig.setFileOverride(false);
        //设置去掉service的I前缀
        globalConfig.setServiceName("%sService");
        //设置主键生成策略  默认的雪花算法
        globalConfig.setIdType(IdType.ID_WORKER);
        //设置时间类型  仅仅只是时间类型
        globalConfig.setDateType(DateType.ONLY_DATE);
        //设置自动配置swagger文档
        globalConfig.setSwagger2(true);
        autoGenerator.setGlobalConfig(globalConfig);

        //配置数据源
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        //设置数据库类型
        dataSourceConfig.setDbType(DbType.MYSQL);
        //设置数据库参数
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/simple_admin?useSSL=false&useUnicode=true&charaterEncoding=utf-8&serverTimezone=GMT%2B8");
        dataSourceConfig.setUsername("root");
        dataSourceConfig.setPassword("root");
        autoGenerator.setDataSource(dataSourceConfig);

        //配置包的配置
        PackageConfig packageConfig = new PackageConfig();
        //设置生成代码的模块名  生成在当前目录下
        //packageConfig.setModuleName("");
        //设置放在那个包下
        packageConfig.setParent("com.lh");
        //设置实体类包名
        packageConfig.setEntity("pojo");
        //设置mapper包名
        packageConfig.setMapper("mapper");
        //设置service包名
        packageConfig.setService("service");
        //设置serviceImpl包名
        packageConfig.setServiceImpl("service.impl");
        //设置controller包名
        packageConfig.setController("controller");
        autoGenerator.setPackageInfo(packageConfig);

        //配置策略
        StrategyConfig strategyConfig = new StrategyConfig();
        //最重要！！！ 配置自动生成代码的表  参数为可变参数  可以传多个
        strategyConfig.setInclude("sys_user", "sys_role", "sys_menu", "sys_user_role", "sys_role_menu");
        //配置命名规则  下划线转驼峰
        strategyConfig.setNaming(NamingStrategy.underline_to_camel);
        //配置列命名规则  下划线转驼峰
        strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
        //配置自动生成lombok
        strategyConfig.setEntityLombokModel(true);
        //配置逻辑删除  参数 逻辑删除的字段名
        strategyConfig.setLogicDeleteFieldName("deleted");
        //配置自动填充
        TableFill createdFill = new TableFill("created", FieldFill.INSERT);
        TableFill updateFill = new TableFill("updated", FieldFill.INSERT_UPDATE);
        List<TableFill> fillList = Arrays.asList(createdFill, updateFill);
        strategyConfig.setTableFillList(fillList);
        //配置乐观锁  乐观锁字段
        strategyConfig.setVersionFieldName("version");
        //配置开启Restful驼峰命名格式
        strategyConfig.setRestControllerStyle(true);
        //配置url下划线命名
        strategyConfig.setControllerMappingHyphenStyle(true);
        autoGenerator.setStrategy(strategyConfig);

        //执行代码生成器
        autoGenerator.execute();

    }
}
